package violet.p2.service;

import violet.p2.bean.Customer;

/**
 * CustomerList 相当于 控制台的作用 通过调用数据库来装配控制台信息 增删改查 供CustomerView调用
 *
 * @author shkstart
 * @date 2022/5/5 - 21:09
 */
public class CustomerList {
    private Customer[] customers;
    private int total;

    public CustomerList(int totalCustomers) {
        customers = new Customer[totalCustomers]; //在创建对象时顺便把定义客户个数的数量和数组长度定下
    }

    public boolean addCustomer(Customer cust) {
//        if(index < 0 || index > total - 1) {
//            return false;
//        }else {
//         int index,
//        } 错误
        if (total >= customers.length) { //看看客户数组位置是否已经满了 满了就false 没满就添加 然后返回true
            return false;
        }

        customers[total++] = cust; //添加客户时total是先执行再加1，
        return true;          // 所以不会影响下标 也就是说total++是同时进行的;
    }

    public boolean deleteCustomer(int index) {
        if (index >= 0 && index <= total - 1) {
            for (int i = index; i < total - 1; i++) {//我对 i < customers.length - 1;的理解\
                customers[i] = customers[i + 1];                // 如果 i < customers.length;是这种情况
            }                                                   //那么 customers[i + 1] 就会超出索引值 数组位置溢出
            customers[total - 1] = null;//把最后用户的地址覆盖掉，然后又有一个空间可以放新用户
            total--;
//            customers[--total] = null; 一步到位！
            return true;
        }
        return false;

    }

    public boolean replaceCustomer(int index, Customer customer) {
        if (index >= 0 && index <= total - 1) {
            customers[index] = customer;
            return true;
        }
        return false;
    }

    public Customer[] getAllCustomer() {
            Customer[] custs = new Customer[total]; //刚开始我以为创建下标new Customer[total - 1];
            // 但其实时长度，所以不需要-1
            for (int i = 0; i < total; i++) {
                custs[i] = customers[i];
            }
        return custs;
    }

    public Customer getCustomer(int index) {
        if (index > total - 1) { //如果搜寻的索引值大于已存在的客户索引值
            // 那么返回null 就是那个数组位置还没有地址值的意思
            return null;
        }
        return customers[index];
    }

    public int getTotal() {
        return total;
    }

}
